﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Utilities.Common;
using DataBaseManager;

namespace BLGPS
{
    public class Dispositivo
    {
        [IsId]
        public decimal  Id { get; set; }
        public TipoDispositivo TipoDispositivo { get; set; }
        public string Descripcion { get; set; }
        public string IMEI { get; set; }
        public string NroSerie { get; set; }
        public string NroCelular { get; set; }
        public string Activo { get; set; }
        public Vehiculo Vehiculo { get; set; }
        internal decimal idDispositivoXCamion { get; set; }

        public void Guardar()
        {
            BaseDatos.DB.Save(this);
        }

        public void Guardar(Empresa Empresa)
        {
            ParameterManager parameters = new ParameterManager() { new Parameter("idEmpresa", Empresa.Id) };
            BaseDatos.DB.Save(this, parameters);
        }

        /// <summary>
        /// Utilizar solo para el proceso de recepcion de paquetes GPS.
        /// </summary>
        /// <param name="paquete"></param>
        /// <returns></returns>
        internal static Dispositivo ObtenerSegunPaquete(string paquete)
        {
#warning buscar en base con idDispositivoporcamion, no haria falta el vehiculo, cargar tipo de dispositivo
            throw new NotImplementedException();
        }

        internal Movimiento Parse(string paquete)
        {
            ParserBase parser = ParserProvider.GetParser(TipoDispositivo);
            if (parser == null) return null;

            return parser.Parse(paquete);
        }

        public void AsignarVehiculo(Vehiculo vehiculo)
        {
            if (vehiculo != null)//si selecciono un vehiculo, me fijo si es el mismo
            {
                if (Vehiculo != null)
                {
                    if (Vehiculo.Id != vehiculo.Id)//si es distinto, elimino la asignacion actual y agrego la nueva
                    {
                        EliminarAsignacion();
                        CrearAsignacion(Vehiculo);
                    }
                }
                else
                {
                    CrearAsignacion(Vehiculo);
                }
               
            }
            else //no selecciono vehiculo
            {
                if(Vehiculo!=null)//si estoy desasignando..
                    EliminarAsignacion();
            }
            Vehiculo = vehiculo;

        }

        private void CrearAsignacion(BLGPS.Vehiculo Vehiculo)
        {
             
        }

        private void EliminarAsignacion()
        {
           /* ParameterManager parametros = new ParameterManager();
            parametros.Add("IDDispositivo", this.Id, true);
            parametros.Add("IDVehiculo", this.Id, true);
            parametros.Add("FechaHasta", DBNull.Value, true);
            parametros.Add("FechaHasta", DateTime.Now);
            BaseDatos.DB.Update(MyTables.DispositivoXCamion, parametros);*/

            BaseDatos.DB.ExecuteSQL("Update DispositivoXCamion set FechaHasta='"+DateTime.Now+"' where iddispositivo="+this.Id.ToString() +" and idvehiculo="+Vehiculo.Id.ToString()+" and fechahasta is null" );
          

        }

    }
}
